#ifndef LST_TIMER_H
#define LST_TIMER_H

#include <stdio.h> // 标准输入输出库
#include <time.h>  // 时间相关函数和类型
#include <arpa/inet.h> // 网络地址结构体

#define BUFFER_SIZE 64 // 缓冲区大小

// 前向声明：用户数据结构体
struct client_data;

// 定时器结构体，表示一个定时器节点
typedef struct util_timer {
    time_t expire;   // 定时器超时时间（绝对时间，单位：秒）
    void (*cb_func)(struct client_data*); // 定时器到期时调用的回调函数
    struct client_data* user_data; // 指向用户数据的指针
    struct util_timer* prev; // 指向前一个定时器节点
    struct util_timer* next; // 指向下一个定时器节点
} util_timer;

// 定时器链表结构体，管理所有定时器
typedef struct sort_timer_lst {
    util_timer* head; // 链表头指针
    util_timer* tail; // 链表尾指针
} sort_timer_lst;

// 用户数据结构体，保存客户端相关信息
typedef struct client_data {
    struct sockaddr_in address; // 客户端地址
    int sockfd;                // 客户端socket文件描述符
    char buf[BUFFER_SIZE];     // 数据缓冲区
    util_timer* timer;         // 指向该用户关联的定时器
} client_data;

// 定时器链表相关操作函数声明
void sort_timer_lst_init(sort_timer_lst* lst);      // 初始化定时器链表
void sort_timer_lst_destroy(sort_timer_lst* lst);   // 销毁定时器链表，释放所有节点
void add_timer(sort_timer_lst* lst, util_timer* timer); // 添加定时器到链表
void adjust_timer(sort_timer_lst* lst, util_timer* timer); // 调整定时器在链表中的位置
void del_timer(sort_timer_lst* lst, util_timer* timer);    // 从链表中删除定时器
void tick(sort_timer_lst* lst); // 定时处理函数，遍历链表处理到期定时器

#endif // LST_TIMER_H
